import advListView from '$v/advList' //引入advList视图

import {
  isLoginRequest
} from '../api/admin' //引入权限控制api

import {
  addAdvRequest,
  advListRequest,
  deleteAdvRequest,
  getUpdateDataRequest,
  updateAdvRequest,
} from '../api/adv' //引入添加广告api


//封装查询广告函数
async function getAllAdvList(res, pageNo) {
  try {
    const findResult = await advListRequest(pageNo, 3)
    const {
      advList,
      pageCount
    } = findResult.data

    // console.log(advList,pageCount);
    //查询成功响应页面
    res.render(advListView({
      advList,
      pageCount
    }))

  } catch (e) {
    alert("有异常" + e.message)

    //判断是否是权限异常
    if (!e.isLogin) {
      return router.go("/login");
    }

  }
}


export default async (req, res) => {
  //路由切换的时候验证登录
  try {
    await isLoginRequest();
  } catch (e) {
    //请求异常后提示用户
    alert("有异常" + e.message)

    //判断是否是权限异常
    if (!e.isLogin) {
      return router.go("/login");
    }
  }


  //验证通过先渲染页面
  await getAllAdvList(res, 1)


  //事件委派
  document.onclick = async function (e) {
    //添加广告逻辑
    if (e.target.id === "adv-save") {
      //收集表单数据 使用FormData  js自带的不用引入
      const myForm = new FormData(document.advForm)

      // console.log(myForm.get("advTitle"));
      // console.log(myForm.get("advType"));
      // console.log(myForm.get("advOrder"));


      // if(myForm.get("advPic").name){
      //   console.log(true);
      // }else{
      //   console.log(false);
      // }

      // if(myForm.get("advPic")){
      //   console.log(true);
      // }else{
      //   console.log(false);
      // }

      //判断输入的内容不能为空
      if (!myForm.get("advTitle") || !myForm.get("advType") || !myForm.get("advOrder") || !myForm.get("advPic").name) {
        document.advForm.reset()
        const oPreImg = document.getElementById('preImg'); //获取img标签
        oPreImg.style.display = "none" //默认隐藏,改为block显示
        return alert("添加的内容不能有空的！！！！")
      }

      try {
        //发送请求
        await addAdvRequest(myForm);
        alert("添加广告成功")

        //关闭添加广告的弹窗
        document.getElementById("addClose").click();

        //把预览的img隐藏
        const oPreImg = document.getElementById('preImg');
        oPreImg.style.display = "none"

        //清空表单
        document.advForm.reset();

        //添加成功重新渲染页面
        getAllAdvList(res ,1)

      } catch (e) {
        alert("添加广告异常" + e.message)
        //判断是否是权限异常
        if (!e.isLogin) {
          //关闭添加广告的弹窗再跳转
          document.getElementById("addClose").click();
          return router.go("/login");
        }
      }

    }

    //删除广告逻辑
    if (e.target.nodeName === "BUTTON" && e.target.classList.contains("btn-delete")) {
      //获取按钮上保存的 当前数据的 _id
      const _id = e.target.dataset.id;

      //给删除广告一个提示
      const re = confirm('真的要删除我嘛=_=')
      if(!re){
        return
      }


      try {
        await deleteAdvRequest(_id)
        alert("删除数据成功")

        //重新渲染页面
        getAllAdvList(res ,1)

      } catch (e) {
        alert("删除数据失败" + e.message)

        //判断是否是权限异常
        if (!e.isLogin) {
          //关闭添加广告的弹窗再跳转
          document.getElementById("addClose").click();
          return router.go("/login");
        }

      }
    }

    //点击更新按钮弹窗获取数据的逻辑
    if (e.target.nodeName === "BUTTON" && e.target.classList.contains("btn-update")) {
      //拿到点击更新按钮时对应的数据的id值(因为每条数据的id时唯一的)
      const _id = e.target.dataset.id;
      try {
        const updateData = await getUpdateDataRequest(_id);
        // console.log(updateData);

        //把数据放入更新的窗口中
        // console.log(document.updateForm);
        document.updateForm.advTitle.value = updateData.data.advTitle;
        document.updateForm.advType.value = updateData.data.advType;
        document.updateForm.advOrder.value = updateData.data.advOrder;

        //给当前弹窗的更新按钮上添加一个自定义属性 保存当前数据的id  方便以后提交
        document.getElementById('adv-update').dataset.id = updateData.data._id;
        //获取更新数据的图片预览
        document.onchange = function (e) {
          //当改变的是添加文件按钮的时候执行下面逻辑
          if (e.target.id === 'updateadvPic') {
            const reader = new FileReader();
            reader.readAsDataURL(e.target.files[0]) //reader上有一个readAsDataURL方法 可以把文件读成base64的格式

            reader.onload = function (e) {
              // console.log(e.target.result);  ///> 当前的读取的base64格式
              //把当前的读取的base64格式 给到img
              const oPreImg = document.getElementById('updatepreImg'); //获取img标签
              console.log(oPreImg);
              oPreImg.src = e.target.result; //添加src显示图片预览
              oPreImg.style.display = "block" //默认隐藏,改为block显示
            }

          }

        }

      } catch (e) {
        alert("更新查询失败" + e.message)
      }

    }

    //点击更新逻辑
    if (e.target.id === 'adv-update') {
      //拿到当前点击的按钮的id值
      const _id = e.target.dataset.id;
      //收集表单数据
      const myForm = new FormData(document.updateForm)
      //判断表单内容不能为空,才发送更新数据请求  
      if (!myForm.get("advTitle") || !myForm.get("advType") || !myForm.get("advOrder") || !myForm.get("advPic").name) {
        document.updateForm.reset()
        const oPreImg = document.getElementById('updatepreImg'); //获取img标签
        oPreImg.style.display = "none" //默认隐藏,改为block显示
        return alert("添加的内容不能有空的！！！！")
      }

      //发送更新数据请求
      try {
        await updateAdvRequest(myForm, _id);
        console.log("更新成功");

        //重新渲染视图
        getAllAdvList(res ,1)

        //关闭添加广告的弹窗再跳转
        document.getElementById("updateClose").click();
        //关闭蒙版
        document.querySelector('.modal-backdrop').style.display = "none";

      } catch (e) {
        alert("更新广告异常" + e.message);
        //判断是否是权限异常
        if (!e.isLogin) {
          //关闭添加广告的弹窗再跳转
          document.getElementById("updateClose").click();
          return router.go("/login");
        }
      }

    }

    
    //监听节点内容改变
    document.onchange = function (e) {
      //添加广告时预览图片
      if (e.target.id === 'advPic') {
        const reader = new FileReader();
        reader.readAsDataURL(e.target.files[0]) //reader上有一个readAsDataURL方法 可以把文件读成base64的格式

        reader.onload = function (e) {
          // console.log(e.target.result); //=> 当前的读取的base64格式
          //把当前的读取的base64格式 给到img
          const oPreImg = document.getElementById('preImg'); //获取img标签
          oPreImg.src = e.target.result; //添加src显示图片预览
          oPreImg.style.display = "block" //默认隐藏,改为block显示
        }

      }

      //更新广告时预览图片
      if (e.target.id === 'updateadvPic') {
        const reader = new FileReader();
        reader.readAsDataURL(e.target.files[0]) //reader上有一个readAsDataURL方法 可以把文件读成base64的格式

        reader.onload = function (e) {
          // console.log(e.target.result); //=> 当前的读取的base64格式
          //把当前的读取的base64格式 给到img
          const oPreImg = document.getElementById('updatepreImg'); //获取img标签
          oPreImg.src = e.target.result; //添加src显示图片预览
          oPreImg.style.display = "block" //默认隐藏,改为block显示
        }

      }

    }

    //点击页码逻辑
    if (e.target.nodeName === "SPAN" && e.target.parentNode.id === "page") {
      //重新发送请求 并传入当前要加载的页码
      const pageNo = +e.target.dataset.pageno;
      //发送查询数据请求
      getAllAdvList(res, pageNo);

    }


  }



}